import numpy as np
import sys
import os
import pprint

def read_npy_pretty(file_path):
    """读取并以易读格式打印 npy 文件内容"""
    if not os.path.exists(file_path):
        print(f"❌ 文件不存在: {file_path}")
        return

    data = np.load(file_path, allow_pickle=True)

    print("✅ 成功读取 npy 文件！")
    print(f"📂 文件路径: {file_path}")
    print(f"📐 数据类型: {type(data)}")
    print(f"📊 数据 shape: {getattr(data, 'shape', '无 shape 属性')}")
    print(f"🔢 数据 dtype: {getattr(data, 'dtype', '无 dtype 属性')}")
    print("-" * 60)

    # numpy 数组专用打印格式
    np.set_printoptions(
        threshold=1000,      # 最多显示1000个元素（防止太长）
        linewidth=120,       # 每行宽度
        precision=6,         # 小数精度
        suppress=True        # 不用科学计数法
    )

    # 根据数据类型选择打印方式
    if isinstance(data, np.ndarray):
        if data.ndim == 1:
            print("📈 一维数组:")
            print(data)
        elif data.ndim == 2:
            print(f"📊 二维数组 (前 {min(10, data.shape[0])} 行):")
            print(data[:10])
        elif data.ndim == 3:
            print(f"🖼️ 三维数组 (形状={data.shape})，显示前一个切片:")
            print(data[0])
        else:
            print(f"📦 高维数组 (ndim={data.ndim})，显示前几个元素:")
            print(data.flat[:20])
    elif isinstance(data, (list, dict, tuple)):
        print("🗂️ Python 对象：")
        pprint.pprint(data, width=120)
    else:
        print("🔍 其他类型：")
        print(data)

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("用法: python read_npy_pretty.py <文件路径>")
        sys.exit(1)
    read_npy_pretty(sys.argv[1])
